package sliceops

import "fmt"

func printSlice(s []int) {
	//
	fmt.Printf("%v, len=%d, cap=%d\n", s, len(s), cap(s))
}

func createSlice() {
	var s []int // 定义一个slice, Zero value for slice is nil
	for i := 0; i < 100; i++ {
		printSlice(s)
		// len超过caps，系统会自动分配一个新数组，caps翻倍
		s = append(s, 2*i+1)
	}
	fmt.Println(s)

	s1 := []int{2, 4, 6, 8} // 建立array，建立slice去view这个array
	printSlice(s1)

	s2 := make([]int, 16) // 定义slice长度固定，值不固定

	s3 := make([]int, 10, 32) // 定义slice长度为10，cap为32

	printSlice(s2)
	printSlice(s3)
}

func copySlice() {
	s1 := []int{2, 4, 6, 8} // 建立array，建立slice去view这个array
	printSlice(s1)
	s2 := make([]int, 16) // 定义slice长度固定，值不固定
	printSlice(s2)
	copy(s2, s1)
	printSlice(s2)
}

func deleteSlice() {
	s1 := []int{2, 4, 6, 8, 0, 0, 0} // 建立array，建立slice去view这个array
	s1 = append(s1[:2], s1[3:]...)   // 利用append进行删除
	printSlice(s1)
	fmt.Println("Popping from front")
	front := s1[0]
	s1 = s1[1:]
	fmt.Println(front)
	fmt.Println(s1)
	fmt.Println("Popping from back")
	tail := s1[len(s1)-1]
	s1 = s1[:len(s1)-1]
	fmt.Println(tail)
	fmt.Println(s1)
}

func main() {
	//createSlice()
	//copySlice()
	deleteSlice()
}
